package com.gitee.techstack;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

/**
 * ┏┓　　　┏┓
 * ┏┛┻━━━┛┻┓
 * ┃　　　　　　　┃
 * ┃　　　━　　　┃
 * ┃　┳┛　┗┳　┃
 * ┃　　　　　　　┃
 * ┃　　　┻　　　┃
 * ┃　　　　　　　┃
 * ┗━┓　　　┏━┛
 * 　　┃　　　┃神兽保佑
 * 　　┃　　　┃代码无BUG！
 * 　　┃　　　┗━━━┓
 * 　　┃　　　　　　　┣┓
 * 　　┃　　　　　　　┏┛
 * 　　┗┓┓┏━┳┓┏┛
 * 　　　┃┫┫　┃┫┫
 * 　　　┗┻┛　┗┻┛
 *
 * @author Yeoman
 * @description 内存溢出影响部分线程的工作
 * @create 2020/4/10 下午1:37
 **/
public class Reference1 {
    private static String ss = "55555";

    public static void main(String[] args) {
        Object obj = new Object();
        WeakReference<Object> wf = new WeakReference<>(obj);
        obj = null;
        List<String> list = new ArrayList<>();

        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1);
                        //被垃圾回收器回收则返回null
                        System.out.println(wf.get());
                        System.out.println(ss);
                        //返回是否被垃圾回收器标记为即将回收的垃圾
                        //由于发生在瞬时间，很难验证返回true
                        System.out.println(wf.isEnqueued());
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

        new Thread(() -> {
            for (int i = 0; i < 1000000000; i++) {

                try {
                    list.add(new String(i + ""));
                    System.out.println("----------------------" + ss);
                    //Thread.sleep(1);
                } catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("发生异常");
                }
            }
        }).start();
    }
}
